/**
 * 定义 store   【选项式定义】
 */

import { defineStore } from "pinia";

/**
 * 定义仓库
 *
 *    返回值：
 *      1. 不是当前仓库实例，而是一个组合式函数
 *      2. 调用该组合式函数，才能得到当前仓库实例
 */
const useAppStore = defineStore("app", {
  state: () => ({
    count: 10,
    list: [1, 2, 3, 4],
    users: [
      {
        id: 1,
        name: "张三",
      },
      {
        id: 2,
        name: "里斯",
      },
    ],
  }),

  getters: {
    /**
     * 如果内部使用 this 来获取 state 相关数据，会丢失类型，需要手动标注
     */
    countPlus(): number {
      return this.count + 1;
    },

    countPlusPlus(state) {
      return state.count + 10;
    },

    getUserById(state) {
      // return state.users[0]
      return (id: number) => {
        return state.users.find((item) => item.id === id);
      };
    },
  },

  actions: {
    // incerment(payload: string) {
    //   // console.log("incerment", payload);
    //   return new Promise((resolve) => {
    //     setTimeout(() => {
    //       this.count++;
    //       resolve("结束了");
    //     }, 3000);
    //   });
    // },

    async incerment(payload: string) {
      throw new Error("我错了");
    },

    decrement(payload: string) {
      console.log("decrement", payload);
      this.count--;
    },

    change(n: number) {
      this.count = n;
    },

    getUserById2(id: number) {
      return this.users.find((item) => item.id === id);
    },
  },
});

/**
 * 导出组合式函数
 */
export default useAppStore;
